插件 semo-plugin-api
今天来写第四篇,给大家展示一下昨天花了 4 个小时新写的一个 Semo
插件,同时预告下一篇给大家讲讲 Semo
的 REPL 环境
功能描述
Semo 由于本身不提供任何直接的功能,只是一个命令行开发的规范和约束,所以,如果想得到若干功能,都需要基于 Semo
来扩展。今天这个插件就给 Semo
提供了网络访问的能力,基于流行的 axios
npm 包。
可能你会想,我想用的时候就直接用 axios
了,为什么要用这个插件呢,问得好,当然可以直接用 axios
,但是这里还有一些额外的好处,也就是带了一个类似于 curl
的命令行工具。
下面我们来说说安装和用法
安装
假设你还没有安装 Semo
,那就一起装了吧~
npm i -g @semo/cli semo-plugin-api
semo api help
执行 help
可以看到一大堆参数,不要被吓到,其实平时基本都用不着。
用法
这里,我们以网上公开的 Fake Rest Server 为例,给大家演示
GET 请求
用于默认就是 GET,所以,不需要加额外的参数。
$ semo api https://jsonplaceholder.typicode.com/posts/1
{
userId: 1,
id: 1,
title: 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',
body: 'quia et suscipit\n' +
'suscipit recusandae consequuntur expedita et cum\n' +
'reprehenderit molestiae ut ut quas totam\n' +
'nostrum rerum est autem sunt rem eveniet architecto'
}
POST 请求
这里可以看到,用了 -X
来表示请求动词,也可以用 --method
,同时我们用 --data
来表示请求体,注意这里可以用一行命令构造一个对象结构。
$ semo api -X POST https://jsonplaceholder.typicode.com/posts --data.title=foo --data.body=bar --userId=1
{ title: 'foo', body: 'bar', id: 101 }
PUT 请求
同理,PUT 就是替换,其余和 POST 类似,注意这里用了小写的 put,意思是这里动词不区分大小写。
$ semo api -X put https://jsonplaceholder.typicode.com/posts/1 --data.title=foo --data.body=bar --userId=1 --id=1
{ title: 'foo', body: 'bar', id: 1 }
PATCH 请求
PATCH 用来替换其中的一部分
$ semo api -X patch https://jsonplaceholder.typicode.com/posts/1 --data.title=foo
{
userId: 1,
id: 1,
title: 'foo',
body: 'quia et suscipit\n' +
'suscipit recusandae consequuntur expedita et cum\n' +
'reprehenderit molestiae ut ut quas totam\n' +
'nostrum rerum est autem sunt rem eveniet architecto'
}
DELETE 请求
当 DELETE
时,Rest Server 并没有给我返回内容,只是没报错
semo api -X delete https://jsonplaceholder.typicode.com/posts/1
{ status: 200, statusText: 'OK' }
HEAD 请求和 OPTIONS 请求
这两个也是可以发出,看不到什么明显的响应。
$ semo api -X head https://jsonplaceholder.typicode.com/posts/1
{ status: 200, statusText: 'OK' }
$ semo api -X options https://jsonplaceholder.typicode.com/posts/1
{
status: 204,
statusText: 'No Content',
'access-control-allow-credentials': 'true',
'access-control-allow-methods': 'GET,HEAD,PUT,PATCH,POST,DELETE'
}
我对这两种请求的响应内容不是很满意,后面可能还要完善一下。
支持发送 --headers
其实支持很多参数,但是大部分真的不是很常用,如果需要了解的话,可以去看 axios
包的说明。
semo api https://jsonplaceholder.typicode.com/posts/1 -H 'X-A:B'
semo api https://jsonplaceholder.typicode.com/posts/1 -H.'X-A'=B
很明显第二种风格很诡异,建议还是用第一种风格。
其他一些功能点
通过文件来传参
参数那么多,每次都写太累了,可以弄成 js 或者 json 文件
semo api --file api.js
semo api --file api.json
这里原来的 -X
和 URL
可写可不写,可以在文件里写,还有就是如果是 js,模块可以返回 literal object
或者函数,或者 Promise。
给 json 响应加点颜色
当然,就算是不加 --color
,某些终端也是给一定的着色的,这里如果加了 --color
参数,则会用 Semo
的 Utils.log
来着色。
semo api https://jsonplaceholder.typicode.com/posts/1 --color
访问 Proxy
如果你要测试的接口访问不到怎么办呢,这里提供了参数支持
semo api http://myip.ipip.net
semo api http://myip.ipip.net --ss
semo api http://myip.ipip.net --socks-proxy=socks://127.0.0.1:1080
可以看到加不加 --ss
参数,返回结果是不同的,另外,如果恰好你的端口也开在 1080,就可以不用输入这么长来执行具体的端口了。
调试信息
可以用 debug
的机制来查看隐藏的调试信息:
DEBUG=semo-* semo api https://jsonplaceholder.typicode.com/posts/1
隐式执行
就是不打算全局或者项目内安装这个插件还想用
semo run api -- https://jsonplaceholder.typicode.com/posts/1
Semo run
会自动帮你把插件下载到另一个地方,只有用的时候才会生效,平时 semo help
是看不到的。
不想安装 Semo
但想试玩一下这个插件
这种方式每次都要隐式的下载一下 Semo
,其实挺慢的,仅供试玩。
npx @semo/cli run api -- http://myip.ipip.net
以包的形式对外提供服务
import { api } from 'semo-plugin-api'
API = api('debug-prefix')
await API.get(url, config)
await API.post(url, data, config)
或者
const { api } = await Utils.invokeHook('component')
小结
这又是一个在几个小时内完成的一个插件,核心还是用的别人的,展示的是 Semo
封装的能力和统一的风格,而且实际上这样的一个小插件也将作为后面整合起来的稍大项目的基础模块。
欢迎大家试用,讨论,有什么问题可以提 issues 或者参与共建,我的愿景目标是形成一个小社区,大家一起共建出许多插件,有的是为了完成更大的项目的基础模块,有的可能是组织内的私有模块,还有的可能仅仅是为了好玩。
semo run plugin -- --remote
可以看到目前的插件还很少,我还需要继续努力哈,希望得到大家的支持。